package org.dromara.patrol.domain.vo;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.common.mybatis.handler.ListInteger2ListLongTypeHandler;
import org.dromara.patrol.domain.PatrolReport;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;


/**
 * 巡店管理-巡店报告视图对象 patrol_report
 *
 * @author LionLi
 * @date 2024-03-25
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PatrolReport.class)
public class PatrolReportVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 报告id
     */
    @ExcelProperty(value = "报告id")
    private Long reportId;
    /**
     * 租户编号
     */
    private String tenantId;
    /**
     * 最终得分
     */
    @ExcelProperty(value = "最终得分")
    private BigDecimal finalScore;

    /**
     * 状态（字典表：UNCOMMITTED 巡店中，VALIDATING 待审核，CORRECTING 待整改，COMMITTED 已完成，FILL_FORM 待填报，TERMINATION 已终止，LAPSED 已失效，SCORING 待打分）
     */
    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典表：UNCOMMITTED,巡=店中，VALIDATING,待=审核，CORRECTING,待=整改，COMMITTED,已=完成，FILL_FORM,待=填报，TERMINATION,已=终止，LAPSED,已=失效，SCORING,待=打分")
    private String status;

    /**
     * 模板总分
     */
    @ExcelProperty(value = "模板总分")
    private BigDecimal totalScore;

    /**
     * 报告名称（自动生成：门店名称-202403081433）
     */
    @ExcelProperty(value = "报告名称", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "自=动生成：门店名称-202403081433")
    private String name;

    /**
     * 区域名称
     */
    private String groupName;

    /**
     * 得分
     */
    @ExcelProperty(value = "得分")
    private BigDecimal score;

    /**
     * 子任务id，实时巡店则为null（patrol_subtask_common.id）
     */
    @ExcelProperty(value = "子任务id，实时巡店则为null", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "p=atrol_subtask_common.id")
    private Long taskId;

    /**
     * 门店id
     */
    @ExcelProperty(value = "门店id")
    private Long storeId;

    /**
     * 类型（字典表：PATROL 巡查）
     */
    @ExcelProperty(value = "类型", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典表：PATROL,巡=查")
    private String type;

    /**
     * 子类型（字典表：NORMAL ）
     */
    @ExcelProperty(value = "子类型", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典表：NORMAL")
    private String subType;

    /**
     * 巡查类型（字典表：PATROL_REALTIME 实时巡店，现场巡店，录像巡店）
     */
    @ExcelProperty(value = "巡查类型", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典表：PATROL_REALTIME,实=时巡店，现场巡店，录像巡店")
    private String patrolType;

    /**
     * 巡查子类型（字典表：PATROL_TEMPLATE 模板巡店）
     */
    @ExcelProperty(value = "巡查子类型", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典表：PATROL_TEMPLATE,模=板巡店")
    private String patrolSubType;

    /**
     * 报告通知人ids
     */
    @ExcelProperty(value = "报告通知人ids")
    private String handler;

    /**
     * 巡店开始时间戳
     */
    @ExcelProperty(value = "巡店开始时间戳")
    private Long inspectStartTime;

    /**
     * 巡店结束时间戳
     */
    @ExcelProperty(value = "巡店结束时间戳")
    private Long inspectEndTime;

    /**
     * 巡店图片urls
     */
    @ExcelProperty(value = "巡店图片urls")
    private String inspectPicture;

    /**
     * 整改项个数（如果需要整改，该值等于问题项）
     */
    @ExcelProperty(value = "整改项个数", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "如=果需要整改，该值等于问题项")
    private Long rectifyNumber;

    /**
     * 整改人id
     */
    @ExcelProperty(value = "整改人id")
    private Long rectifyPerson;

    /**
     * 有问题项个数
     */
    @ExcelProperty(value = "有问题项个数")
    private Integer problemNumber;

    /**
     * 没有问题个数
     */
    private Integer noProblemNumber;
    /**
     * 不适用个数
     */
    private Integer notApplicableNumber;
    /**
     * 不计分个数
     */
    private Integer noScoreNumber;

    /**
     * 策略（字典表：DEDUCTION 扣分， SCORE 得分）
     */
    @ExcelProperty(value = "策略", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典表：DEDUCTION,扣=分，,S=CORE,得=分")
    private String markStrategy;

    /**
     * 是否生成自定义报告（字典表：0 是， 1 否）
     */
    @ExcelProperty(value = "是否生成自定义报告", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典表：0,是=，,1=,否=")
    private String customizedReport;

    /**
     * 是否生成流程报告（字典表：0 是， 1 否）
     */
    @ExcelProperty(value = "是否生成流程报告", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典表：0,是=，,1=,否=")
    private String processPatrolReport;

    /**
     * 任务流id（如果process_patrol_report=是则必填）
     */
    @ExcelProperty(value = "任务流id", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "如=果process_patrol_report=是则必填")
    private Long processInstanceId;

    /**
     * 任务流处理人ids
     */
    /**
     * 任务流处理人ids
     */
    @TableField(typeHandler = ListInteger2ListLongTypeHandler.class)
    private List<Long> stepHandlers;

    /**
     * 版本（字典表：V1，V2）
     */
    @ExcelProperty(value = "版本", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典表：V1，V2")
    private String ver;

    /**
     * 消耗时间（毫秒）
     */
    @ExcelProperty(value = "消耗时间", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "毫=秒")
    private Long duration;

    /**
     * 能否删除（字典表：0 是，1 否）
     */
    @ExcelProperty(value = "能否删除", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典表：0,是=，1,否=")
    private String canBeDeleted;

    /**
     * 巡店模板、巡店评分项id（status!=UNCOMMITTED 巡店中 则必填）
     */
    @ExcelProperty(value = "巡店模板、巡店评分项id", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "s=tatus!=UNCOMMITTED,巡=店中,则=必填")
    private Long detailId;


    private Object detail;

    /**
     * 得分率
     */
    @ExcelProperty(value = "得分率")
    private BigDecimal scoreRate;

    /**
     * 巡店模板id
     */
    @ExcelProperty(value = "巡店模板id")
    private Long templateId;

    /**
     * 总项个数
     */
    @ExcelProperty(value = "总项个数")
    private Long checkItemNumber;

    /**
     * 巡查项个数
     */
    @ExcelProperty(value = "巡查项个数")
    private Long inspectedNumber;

    /**
     * 整改完成时间（无需整改则必填）
     */
    @ExcelProperty(value = "整改完成时间", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "无=需整改则必填")
    private Long rectifyDoneTime;

    /**
     * 整改人ids，包含子项需要整改人的id，如果该字段有的用户都可以开始整改，但是只能整改子项约束的
     */
    @ExcelProperty(value = "整改人ids，包含子项需要整改人的id，如果该字段有的用户都可以开始整改，但是只能整改子项约束的")
    @TableField(typeHandler = ListInteger2ListLongTypeHandler.class)
    private List<Long> assignRectifyPersons;

    /**
     * 任务流开始时间
     */
    @ExcelProperty(value = "任务流开始时间")
    private Long stepStartTime;

    /**
     * 全部不得分（字典表：0 是，1 否）
     */
    @ExcelProperty(value = "全部不得分", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "字=典表：0,是=，1,否=")
    private String allNoScoring;

    /**
     * 得分项{
        "RP_SCORE": 0.0,
        "INAPPLICABLE_ITEM_SCORE": 50.0,
        "RP_DEDUCTION_SCORE": 0.0,
        "TOTAL_DEDUCTION_SCORE": 0.0,
        "TOTAL_GET_SCORE": 91.0,
        "TOTAL_SCORE": 141.0,
        "ITEM_COUNT": 7,
        "RESPONSIBLE_PERSONS": 0
    }
     */
//    @ExcelProperty(value = "得分项{
//        "RP_SCORE": 0.0,
//        "INAPPLICABLE_ITEM_SCORE": 50.0,
//        "RP_DEDUCTION_SCORE": 0.0,
//        "TOTAL_DEDUCTION_SCORE": 0.0,
//        "TOTAL_GET_SCORE": 91.0,
//        "TOTAL_SCORE": 141.0,
//        "ITEM_COUNT": 7,
//        "RESPONSIBLE_PERSONS": 0
//    }")


    private Object calculatedItemScore;

    /**
     * 是否草稿（字典表：0 是，1 否）
     */
//    @ExcelProperty(value = "是否草稿", converter = ExcelDictConvert.class)
//    @ExcelDictFormat(readConverterExp = "字=典表：0,是=，1,否=")
    private String isCheckDraft;

    /**
     * 是否逾期（0 是，1 否）
     */
    private String executableWenOverdue;
    /**
     * 执行者
     */
    private Long createBy;

    /**
     * ID 对应 名称集合
     */
    private Map<String, String> nameMap;

}
